package com.ruoyi.tzai.service.ai;

/**
 * AI服务统一接口
 * 支持多种AI模型：OpenAI GPT、Claude、通义千问、DeepSeek等
 * 
 * @author tzai
 * @date 2025-10-27
 */
public interface IAIService 
{
    /**
     * 统一的提示词构建器 - 中文源文本
     * 所有AI服务实现类使用相同的提示词格式，确保输出一致性
     */
    static String buildChineseSourcePrompt() {
        return "你是一位专业的新闻编辑和翻译专家。请对给定的中文资讯内容完成以下任务：\n\n" +
               "【严格字数限制 - 必须遵守】\n" +
               "1. 提取100字的简短摘要（严格控制在80-100字之间）\n" +
               "2. 生成200-250字的详细内容（严格控制在200-250字之间，不得超过250字）\n" +
               "3. 将详细内容拆分为5-8个自然句子（每句20-50字）\n" +
               "4. 将简短摘要翻译成英文（严格控制在80-100个英文单词）\n" +
               "5. 将详细内容翻译成英文（严格控制在200-250个英文单词，不得超过250词）\n" +
               "6. 将英文详细内容拆分为5-8个自然句子\n\n" +
               "返回格式要求（必须严格遵守）：\n\n" +
               "===中文简短摘要===\n" +
               "（100字以内，概括核心要点）\n\n" +
               "===中文详细内容===\n" +
               "（200-250字，展开阐述，不得超过250字）\n\n" +
               "<<<中文句子>>>\n" +
               "[S0]详细内容的第一句\n" +
               "[S1]详细内容的第二句\n" +
               "[S2]详细内容的第三句\n\n" +
               "===英文简短摘要===\n" +
               "（100 words max, key points）\n\n" +
               "===英文详细内容===\n" +
               "(200-250 words, NO MORE than 250 words)\n\n" +
               "<<<英文句子>>>\n" +
               "[S0]First sentence\n" +
               "[S1]Second sentence\n" +
               "[S2]Third sentence\n\n" +
               "【关键要求 - 务必遵守】\n" +
               "- 中文详细内容必须在250字以内，英文详细内容必须在250词以内\n" +
               "- 简短摘要和详细内容要有明显区别\n" +
               "- 断句数量控制在5-8句，每句长度适中\n" +
               "- 每个句子必须以[S0][S1][S2]等标记开头\n" +
               "- 不要使用引号\n" +
               "- 只返回上述格式的内容，不要其他说明";
    }

    /**
     * 统一的提示词构建器 - 英文源文本
     * 所有AI服务实现类使用相同的提示词格式，确保输出一致性
     */
    static String buildEnglishSourcePrompt() {
        return "You are a professional news editor and translator. Please complete the following tasks for the given English news content:\n\n" +
               "【STRICT WORD LIMITS - MUST OBEY】\n" +
               "1. Extract brief summary (80-100 words STRICTLY)\n" +
               "2. Generate detailed content (200-250 words STRICTLY, NO MORE than 250 words)\n" +
               "3. Split detailed content into 5-8 natural sentences (20-50 words each)\n" +
               "4. Translate brief summary to Chinese (80-100 Chinese characters)\n" +
               "5. Translate detailed content to Chinese (200-250 Chinese characters, NO MORE than 250)\n" +
               "6. Split Chinese detailed content into 5-8 natural sentences\n\n" +
               "Return Format Requirements (must strictly follow):\n\n" +
               "===English Brief Summary===\n" +
               "(100 words max, key points)\n\n" +
               "===English Detailed Content===\n" +
               "(200-250 words, NO MORE than 250 words)\n\n" +
               "<<<English Sentences>>>\n" +
               "[S0]First sentence\n" +
               "[S1]Second sentence\n" +
               "[S2]Third sentence\n\n" +
               "===Chinese Brief Summary===\n" +
               "(100字以内)\n\n" +
               "===Chinese Detailed Content===\n" +
               "(200-250字，不得超过250字)\n\n" +
               "<<<Chinese Sentences>>>\n" +
               "[S0]第一句\n" +
               "[S1]第二句\n" +
               "[S2]第三句\n\n" +
               "【CRITICAL REQUIREMENTS】\n" +
               "- English detailed content MUST be under 250 words\n" +
               "- Chinese detailed content MUST be under 250 characters\n" +
               "- Brief summary and detailed content must be clearly different\n" +
               "- Control sentence count to 5-8, moderate length each\n" +
               "- Each sentence must start with [S0][S1][S2] markers\n" +
               "- No quotation marks\n" +
               "- Return only the above format, no other explanations";
    }

    /**
     * 统一的全文处理提示词 - 中文源文本
     * 用于全文模式，不进行摘要缩减，保持原文完整
     * 
     * @deprecated 全文模式建议使用代码断句+翻译，此提示词可能导致AI输出截断
     */
    static String buildChineseFullTextPrompt() {
        return "你是一位文本处理与翻译专家。现在请严格按照以下要求处理输入的中文原文全文：\n\n" +
               "【处理模式：全文处理（不缩短）】\n" +
               "1. 不进行任何摘要或缩写，保持原文语义与信息完整。\n" +
               "2. 对原文全文进行自然、适合TTS的分句，生成 20-60 字左右的句子，保证语义自然断开。\n" +
               "3. 将原文全文准确翻译成英文，并对英文全文进行等价的自然分句。\n\n" +
               "【返回格式（必须严格遵守）】\n" +
               "===中文简短摘要===\n" +
               "（按要求不做摘要）\n\n" +
               "===中文详细内容===\n" +
               "（返回原文全文）\n\n" +
               "<<<中文句子>>>\n" +
               "[S0]第一句……\n" +
               "[S1]第二句……\n" +
               "[S2]第三句……\n\n" +
               "===英文简短摘要===\n" +
               "(No summary as requested)\n\n" +
               "===英文详细内容===\n" +
               "(Full English translation of the original text)\n\n" +
               "<<<英文句子>>>\n" +
               "[S0]First sentence...\n" +
               "[S1]Second sentence...\n" +
               "[S2]Third sentence...\n\n" +
               "【重要说明】\n" +
               "- 不要进行任何压缩或省略。\n" +
               "- 分句应尽量在语义、标点、从句边界处断开，适配TTS。\n" +
               "- 如文本过长，请依然确保完整输出；若无法一次性输出，请尽可能完整并保持结构。";
    }

    /**
     * 统一的全文处理提示词 - 英文源文本
     * 用于全文模式，不进行摘要缩减，保持原文完整
     * 
     * @deprecated 全文模式建议使用代码断句+翻译，此提示词可能导致AI输出截断
     */
    static String buildEnglishFullTextPrompt() {
        return "You are an expert in text processing and translation. Strictly follow the rules below for the given English text:\n\n" +
               "[Processing Mode: FULL TEXT - NO SUMMARIZATION]\n" +
               "1. Do NOT summarize or shorten. Preserve all information.\n" +
               "2. Perform natural sentence segmentation suitable for TTS (20-50 words each).\n" +
               "3. Translate the entire text into Chinese, and perform equivalent natural sentence segmentation in Chinese.\n\n" +
               "[Return Format - MUST follow]\n" +
               "===English Brief Summary===\n" +
               "(No summary as requested)\n\n" +
               "===English Detailed Content===\n" +
               "(Return the full original English text)\n\n" +
               "<<<English Sentences>>>\n" +
               "[S0]First sentence...\n" +
               "[S1]Second sentence...\n" +
               "[S2]Third sentence...\n\n" +
               "===Chinese Brief Summary===\n" +
               "（按要求不做摘要）\n\n" +
               "===Chinese Detailed Content===\n" +
               "（返回英文原文的完整中文翻译）\n\n" +
               "<<<Chinese Sentences>>>\n" +
               "[S0]第一句……\n" +
               "[S1]第二句……\n" +
               "[S2]第三句……\n\n" +
               "[Notes]\n" +
               "- No compression or omission.\n" +
               "- Segment at natural boundaries for TTS.\n" +
               "- If the text is too long to output once, return as complete as possible while preserving structure.";
    }

    /**
     * 生成摘要
     * 
     * @param content 原文内容
     * @param language 语言（cn/en）
     * @return 摘要
     */
    String generateSummary(String content, String language);

    /**
     * 翻译文本（简化版，用于并行处理）
     * 子类可以重写提供更优化的实现
     * 
     * @param text 原文
     * @param sourceLang 源语言（cn/en）
     * @param targetLang 目标语言（cn/en）
     * @return 翻译结果
     */
    default String translate(String text, String sourceLang, String targetLang) {
        // 默认实现：调用生成双语摘要，然后提取翻译部分
        BilingualSummary result = generateBilingualSummary(text, sourceLang, "summary");
        return "en".equals(targetLang) ? result.getEnContent() : result.getCnContent();
    }

    /**
     * 智能断句
     * 将长文本智能拆分为适合语音合成的短句
     * 
     * @param content 原文内容
     * @param language 语言
     * @return 断句后的句子数组（JSON格式）
     */
    String smartSegmentation(String content, String language);

    /**
     * 测试连接
     * 
     * @return 是否连接成功
     */
    boolean testConnection();

    /**
     * 获取模型名称
     * 
     * @return 模型名称
     */
    String getModelName();

    /**
     * 一次性生成双语摘要和断句
     * 提高效率，减少API调用次数
     * 
     * @param content 原始内容
     * @param sourceLang 源语言（cn/en）
     * @return BilingualSummary 包含中英文摘要、内容和断句
     */
    BilingualSummary generateBilingualSummary(String content, String sourceLang);

    /**
     * 一次性生成双语摘要/内容/断句（带处理模式）
     * processMode: summary=摘要处理（默认），full=全文处理（不缩短，仅分句与翻译）
     */
    default BilingualSummary generateBilingualSummary(String content, String sourceLang, String processMode) {
        // 默认实现回退到原有方法
        return generateBilingualSummary(content, sourceLang);
    }

    /**
     * 双语摘要结果（包含摘要、完整内容和断句）
     */
    class BilingualSummary {
        private String cnSummary;      // 中文摘要
        private String cnContent;      // 中文完整内容
        private String cnSentences;    // 中文断句JSON
        private String enSummary;      // 英文摘要
        private String enContent;      // 英文完整内容
        private String enSentences;    // 英文断句JSON
        
        public String getCnSummary() { return cnSummary; }
        public void setCnSummary(String cnSummary) { this.cnSummary = cnSummary; }
        
        public String getCnContent() { return cnContent; }
        public void setCnContent(String cnContent) { this.cnContent = cnContent; }
        
        public String getCnSentences() { return cnSentences; }
        public void setCnSentences(String cnSentences) { this.cnSentences = cnSentences; }
        
        public String getEnSummary() { return enSummary; }
        public void setEnSummary(String enSummary) { this.enSummary = enSummary; }
        
        public String getEnContent() { return enContent; }
        public void setEnContent(String enContent) { this.enContent = enContent; }
        
        public String getEnSentences() { return enSentences; }
        public void setEnSentences(String enSentences) { this.enSentences = enSentences; }
    }
}

